package net.butfly.bus.server.invoker;

import net.butfly.bus.config.bean.NodeBean;
import net.butfly.bus.server.ServerConfig;
import net.butfly.bus.server.invoker.impl.RemoteProvider;
import net.butfly.bus.server.invoker.impl.SpringProvider;


/**
 * Sender工厂，根据节点描述对象返回Sender
 * 
 */
public class InvokerFactory {
	private static InvokerFactory ins = new InvokerFactory();

	public static InvokerFactory getInstance() {
		return ins;
	}

	public Invoker getInvoker(String nodeId) {
		NodeBean nodeBean = ServerConfig.getNodeBean(nodeId);
		return nodeBean != null ? getInvoker(nodeBean) : null;
	}

	public InvokerProvider getProvider(NodeBean nodeBean) {
		InvokerProvider provider = null;
		InvokerTypeFactory fr = InvokerTypeFactory.getInstance();
		if (fr.isSpring(nodeBean.getContainer().getType())) {// Spring
			provider = SpringProvider.getInstance(nodeBean.getContainer().getConfig());// 单例
		} else if (fr.isEBox(nodeBean.getContainer().getType())) {// 预置本地单例
			provider = RemoteProvider.getInstance(nodeBean.getContainer().getConfig());// 单例
		}
		return provider;
	}

	public Invoker getInvoker(NodeBean nodeBean) {
		InvokerProvider provider = getProvider(nodeBean);
		return provider != null ? provider.createInvoker() : null;
	}
}
